/*
	Copyright (C) 2013 Pontificia Universidad Catolica del Peru
	contact: http://avatar.inf.pucp.edu.pe/realidad-aumentada/
	address contact: Av. Universitaria 1801, San Miguel, Lima-Peru.
	
	This file is part of UbicAR PUCP.

	This program is free software: you can redistribute it and/or modify
	it under the terms of the GNU General Public License as published by
	the Free Software Foundation, either version 3 of the License, or
	(at your option) any later version.

	This program is distributed in the hope that it will be useful,
	but WITHOUT ANY WARRANTY; without even the implied warranty of
	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
	GNU General Public License for more details.

	You should have received a copy of the GNU General Public License
	along with This program.  If not, see <http://www.gnu.org/licenses/>.
*/
/*
	Author: Pedro Carrión Castagnola
	Pontificia Universidad Catolica del Peru
	Direccion de Informatica Academica
	
	Modified by: Alvaro Roger Agüero Sánchez, Rodolfo Javier Galvez Meza
	Pontificia Universidad Catolica del Peru
	Departamento de Ingeniería
*/

package org.grupoavatar.guiaubicua;

import java.util.ArrayList;
import java.util.List;
import java.util.Vector;
import org.grupoavatar.guiaubicua.auxiliares.ExpandableListAdapter;
import org.grupoavatar.guiaubicua.auxiliares.GroupEntity;
import org.grupoavatar.guiaubicua.auxiliares.Item;
import org.grupoavatar.guiaubicua.auxiliares.ListaCategoriaRow;
import org.grupoavatar.guiaubicua.mix.DataView;
import org.grupoavatar.guiaubicua.mix.Marker;
import org.grupoavatar.guiaubicua.mix.MixContext;
import org.grupoavatar.guiaubicua.mix.MixState;
import org.grupoavatar.guiaubicua.mix.data.DataSource;
import org.grupoavatar.guiaubicua.mix.data.DataSource.DATASOURCE;
import com.actionbarsherlock.app.SherlockActivity;
import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuInflater;
import com.actionbarsherlock.view.MenuItem;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.view.KeyEvent;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.CheckBox;
import android.widget.ExpandableListView;
import android.widget.ExpandableListView.OnChildClickListener;
//import android.widget.ListView;
import android.widget.Toast;

public class VFiltro extends SherlockActivity {

	private Vector<String> dataSourceMenu;
	private Vector<String> dataSourceDescription;
	private Vector<Boolean> dataSourceChecked;
	private MixContext mixContext;
	private DataView dataView;

	//private ExpandableListView listF;
	//private ListView listF;
	public static List<Marker> searchResultMarkers;
	public static List<Marker> originalMarkerList;
	private static List<GroupEntity> categorias;
	public static List<Item> categoriasCompletas;
	private ExpandableListView categoriasView;
	public static VFiltro filtroContext;
	private ExpandableListAdapter adapter;
	
	private boolean alMenosUnaCategoriaSeleccionada;

	public Vector<String> getDataSourceMenu() {
		return dataSourceMenu;
	}

	public Vector<String> getDataSourceDescription() {
		return dataSourceDescription;
	}

	public Vector<Boolean> getDataSourceChecked() {
		return dataSourceChecked;
	}

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
//		requestWindowFeature(Window.FEATURE_NO_TITLE);
		dataView = VInicial.dataView;
		mixContext = dataView.getContext();
		filtroContext = this;
		
		//siempre se recargaran los resultados
		DataView.actualizarMarkers = true;
		dataView.changeState(MixState.NOT_STARTED);
		
		this.setContentView(R.layout.filtro);
		
		alMenosUnaCategoriaSeleccionada = true;
		
		//header
//		Button btnLogo = (Button) findViewById(R.id.btnLogo);
//		btnLogo.setOnClickListener(new View.OnClickListener() {
//			@Override
//			public void onClick(View v) {
//				DataView.volverInicio = true;
//				finish();
//			}
//		});		
		getSherlock().getActionBar().setTitle("Filtro por categorías");
		
//		listF = (ExpandableListView) findViewById(R.id.listaFiltro);
//		listF = (ListView) findViewById(R.id.listaFiltro);

		dataSourceChecked = new Vector<Boolean>();
//		dataSourceChecked.add(mixContext.isDataSourceSelected(DATASOURCE.LUGARESURL));
//		dataSourceChecked.add(mixContext.isDataSourceSelected(DATASOURCE.LFACULTADES));
//		dataSourceChecked.add(mixContext.isDataSourceSelected(DATASOURCE.LDEPARTAMENTOS));
//		dataSourceChecked.add(mixContext.isDataSourceSelected(DATASOURCE.EVENTOSURL));
//		dataSourceChecked.add(mixContext.isDataSourceSelected(DATASOURCE.LAUDITORIOS));
//		dataSourceChecked.add(mixContext.isDataSourceSelected(DATASOURCE.LBIBLIOTECAS));
//		dataSourceChecked.add(mixContext.isDataSourceSelected(DATASOURCE.LCAFETERIAS));
//		dataSourceChecked.add(mixContext.isDataSourceSelected(DATASOURCE.LINSTITUTOS));
//		dataSourceChecked.add(mixContext.isDataSourceSelected(DATASOURCE.LCENTROS));
//		dataSourceChecked.add(mixContext.isDataSourceSelected(DATASOURCE.LDIRECCIONES));
//		dataSourceChecked.add(mixContext.isDataSourceSelected(DATASOURCE.LOTROS));

		
		//nuestras categorias genericas
		dataSourceChecked.add(mixContext.isDataSourceSelected(DATASOURCE.ASESORIA_PASTORAL));
		dataSourceChecked.add(mixContext.isDataSourceSelected(DATASOURCE.ASOCIACIONES_Y_GRUPOS));
		dataSourceChecked.add(mixContext.isDataSourceSelected(DATASOURCE.AUDITORIOS));
		dataSourceChecked.add(mixContext.isDataSourceSelected(DATASOURCE.BANCOS_Y_CAJEROS_AUTOMATICOS));
		dataSourceChecked.add(mixContext.isDataSourceSelected(DATASOURCE.CAFETERIAS));
		dataSourceChecked.add(mixContext.isDataSourceSelected(DATASOURCE.CENTRO_DE_FOTOCOPIADO));
		dataSourceChecked.add(mixContext.isDataSourceSelected(DATASOURCE.CENTROS_DE_ESTUDIOS_Y_CENTROS_DE_INVESTIGACION));
		dataSourceChecked.add(mixContext.isDataSourceSelected(DATASOURCE.COMEDORES_Y_FOOD_COURT));
		dataSourceChecked.add(mixContext.isDataSourceSelected(DATASOURCE.DEPARTAMENTOS_ACADEMICOS));
		dataSourceChecked.add(mixContext.isDataSourceSelected(DATASOURCE.DEPORTES));
		dataSourceChecked.add(mixContext.isDataSourceSelected(DATASOURCE.DIRECCIONES_Y_OFICINAS));
		dataSourceChecked.add(mixContext.isDataSourceSelected(DATASOURCE.EDIFICIOS));
		dataSourceChecked.add(mixContext.isDataSourceSelected(DATASOURCE.EDIFICIOS_MULTIFUNCIONALES));
		dataSourceChecked.add(mixContext.isDataSourceSelected(DATASOURCE.ESTACIONAMIENTOS));
		dataSourceChecked.add(mixContext.isDataSourceSelected(DATASOURCE.FACULTADES));
		dataSourceChecked.add(mixContext.isDataSourceSelected(DATASOURCE.FACULTADES_AUDITORIOS_Y_LABORATORIOS));
		dataSourceChecked.add(mixContext.isDataSourceSelected(DATASOURCE.INSTITUTOS_GENERICO));
		dataSourceChecked.add(mixContext.isDataSourceSelected(DATASOURCE.INSTITUTOS_SUBCATEGORIA));
		dataSourceChecked.add(mixContext.isDataSourceSelected(DATASOURCE.INSTITUTOS_DE_IDIOMAS));
		dataSourceChecked.add(mixContext.isDataSourceSelected(DATASOURCE.LABORATORIOS_Y_TALLERES));
		dataSourceChecked.add(mixContext.isDataSourceSelected(DATASOURCE.LIBRERIAS));
		dataSourceChecked.add(mixContext.isDataSourceSelected(DATASOURCE.MAQUINAS_EXPENDEDORAS));
		dataSourceChecked.add(mixContext.isDataSourceSelected(DATASOURCE.PABELLONES_DE_AULAS));
		dataSourceChecked.add(mixContext.isDataSourceSelected(DATASOURCE.PAGOS_Y_TRANSACCIONES));
		dataSourceChecked.add(mixContext.isDataSourceSelected(DATASOURCE.PAPELERIA_Y_SERVICIOS_DIGITALES));
		dataSourceChecked.add(mixContext.isDataSourceSelected(DATASOURCE.QUIOSCOS));
		dataSourceChecked.add(mixContext.isDataSourceSelected(DATASOURCE.SALAS_DE_LECTURA));
		dataSourceChecked.add(mixContext.isDataSourceSelected(DATASOURCE.SERVICIO_DE_TESORERIA));
		dataSourceChecked.add(mixContext.isDataSourceSelected(DATASOURCE.SERVICIOS_ALIMENTICIOS));
		dataSourceChecked.add(mixContext.isDataSourceSelected(DATASOURCE.SERVICIOS_DE_COMPUTADORAS_E_IMPRESORAS));
		dataSourceChecked.add(mixContext.isDataSourceSelected(DATASOURCE.SERVICIOS_DE_SALUD));
		dataSourceChecked.add(mixContext.isDataSourceSelected(DATASOURCE.SERVICIOS_HIGIENICOS));
		dataSourceChecked.add(mixContext.isDataSourceSelected(DATASOURCE.SISTEMAS_DE_BIBLIOTECAS));
		dataSourceChecked.add(mixContext.isDataSourceSelected(DATASOURCE.SISTEMAS_DE_BIBLIOTECAS_Y_SALAS_DE_LECTURA));
		dataSourceChecked.add(mixContext.isDataSourceSelected(DATASOURCE.TELEFONOS_DE_EMERGENCIA));
		dataSourceChecked.add(mixContext.isDataSourceSelected(DATASOURCE.TELEFONOS_PUBLICOS));
		dataSourceChecked.add(mixContext.isDataSourceSelected(DATASOURCE.TELEFONOS));
		dataSourceChecked.add(mixContext.isDataSourceSelected(DATASOURCE.VARIOS));
		//fin nuestras categorias genericas
		
		prepareResource();
		
		categoriasView = (ExpandableListView) findViewById(R.id.listaFiltro);
		adapter = new ExpandableListAdapter(this,
				categoriasView, categorias);

		DisplayMetrics metrics = new DisplayMetrics();
		getWindowManager().getDefaultDisplay().getMetrics(metrics);
        int width = metrics.widthPixels;
		categoriasView.setIndicatorBounds(width - GetDipsFromPixel(55), width - GetDipsFromPixel(40));
		
		categoriasView.setAdapter(adapter);
		categoriasView.setOnItemClickListener(new OnItemClickListener() {

			@Override
			public void onItemClick(AdapterView<?> l, View v, int position,
					long id) {
				/*
				boolean unicaCatSeleccionada = false;
				
				for (int i = 0; i < dataSourceChecked.size(); i++){
					boolean prueba = dataSourceChecked.get(i); 
					if ( (prueba == true) && (i != position) )	{
						unicaCatSeleccionada = true;
					}
				}
				
				if (!unicaCatSeleccionada)	{
				*/	Toast.makeText(VInicial.getContext(), "Item <"+position+">", Toast.LENGTH_LONG).show();
				/*}
				else	{
					CheckBox cb = (CheckBox) v.findViewById(R.id.cbxListFiltro);
					cb.toggle();
				}
				*/
				
				
			}
		});
		
		categoriasView.setOnChildClickListener(new OnChildClickListener() {
			
			@Override
			public boolean onChildClick(ExpandableListView parent, View v, int groupPosition,
					int childPosition, long id) {
				// TODO Auto-generated method stub
				alMenosUnaCategoriaSeleccionada = false;
				int cuenta = 0;
				Item []items = null;
				if (childPosition == 0) {
					items = DataSource.getSubCat(categoriasCompletas.get(categorias.get(groupPosition).GroupItemCollection.get(childPosition).id-1).datasource);
				}
				
				for (int i = 0; i < dataSourceChecked.size(); i++){
					boolean prueba = dataSourceChecked.get(i); 
					if ( (prueba == true) && (i != categorias.get(groupPosition).GroupItemCollection.get(childPosition).id-1) )	{
						alMenosUnaCategoriaSeleccionada = true;
						cuenta++;
					} else {
						if ((prueba == false) && (i == categorias.get(groupPosition).GroupItemCollection.get(childPosition).id-1)) {
							alMenosUnaCategoriaSeleccionada = true;
							cuenta++;
						}
					}
				}
				
				CheckBox cb = (CheckBox) v.findViewById(R.id.cbxListFiltro);
				
//				if (!unicaCatSeleccionada || ((childPosition == 0) && (cuenta == items.length-1))) {
					//si el checkbox al cual se le dio 'click' es de algún "todos" (primer hijo de cada subgrupo) y la cantidad
					//de checkbox marcados como verdadero (valor almacenado en "cuenta") es igual a la cantidad de hijos de la categoria 
					//al cual pertenece "todos", pero sin contar a este último
					//entonces, se entiende que se van a desmarcar "todas las categorias restantes que estan marcadas" y al final no habrá ningun checkbox marcado, es decir
					//ninguna categoria seleccionada.
//					Toast.makeText(VInicial.getContext(), "Debe seleccionar al menos una categoria.", Toast.LENGTH_LONG).show();
//				}
//				else {
//					cb.toggle();
//				}
				
				//alternativa para agregar las opciones de "seleccionar todos" y "deseleccionar todos"
				if ((childPosition == 0) && (cuenta == items.length-1)) {
					alMenosUnaCategoriaSeleccionada = false;
				}
				
				cb.toggle();
				
//				if (cb.isChecked()) {
//					if (childPosition == 0) { //es el de "Todos"
//						Item []items = DataSource.getSubCat(VFiltro.categoriasCompletas.get(adapter.getmGroupCollection().get(groupPosition).GroupItemCollection.get(childPosition).id-1).datasource);
//						for (int i=0; i<items.length; i++) {
//							ListaCategoriaHolder child = (ListaCategoriaHolder) parent.getChildAt(i).getTag();
//							child.cbxSel.setChecked(true);
//						}
//					} else {
//						int cuenta = 0;
//						for (int j = 1; j < parent.getChildCount(); j++) {
//							ListaCategoriaHolder child = (ListaCategoriaHolder) parent.getChildAt(j).getTag();
//							if (child.cbxSel.isChecked())
//								cuenta++;
//						}
//						if (cuenta == parent.getChildCount()-1)  //todos los hijos activos
//							((ListaCategoriaHolder)(parent.getChildAt(0).getTag())).cbxSel.setChecked(true);
//						else
//							((ListaCategoriaHolder)(parent.getChildAt(0).getTag())).cbxSel.setChecked(false);
//					}
//				} else {
//					if (childPosition == 0) { //es el de "Todos"
//						Item []items = DataSource.getSubCat(VFiltro.categoriasCompletas.get(adapter.getmGroupCollection().get(groupPosition).GroupItemCollection.get(childPosition).id-1).datasource);
//						for (int i=0; i<items.length; i++) {
//							ListaCategoriaHolder child = (ListaCategoriaHolder) parent.getChildAt(i).getTag();
//							child.cbxSel.setChecked(false);
//						}
//					} else {
//						((ListaCategoriaHolder)(parent.getChildAt(0).getTag())).cbxSel.setChecked(false);
//					}
//				}
				return false;
			}
		});
		/*
		SimpleExpandableListAdapter expListAdapter =
				new SimpleExpandableListAdapter(
					this,
					createGroupList(),	// groupData describes the first-level entries
					R.layout.group_row,	// Layout for the first-level entries
					new String[] { "nombreCat" },	// Key in the groupData maps to display
					new int[] { R.id.nombre },		// Data under "colorName" key goes into this TextView
					createChildList(),	// childData describes second-level entries
					R.layout.child_row,	// Layout for second-level entries
					new String[] { "icono", "nombreSubCat" },	// Keys in childData maps to display
					new int[] { R.id.imgIconListPOI, R.id.nombre }	// Data under the keys above go into these TextViews
				);
		*/
//		ListaCategoriaRow listacat_data[] = new ListaCategoriaRow[] {
//				new ListaCategoriaRow(/*R.drawable.circle_icon_pri*/
//						mixContext.getDataSourceIcon(DATASOURCE.LUGARESURL),
//						mixContext.getDataSourceName(DATASOURCE.LUGARESURL),
//						mixContext.isDataSourceSelected(DATASOURCE.LUGARESURL)),
//				new ListaCategoriaRow(
//						mixContext.getDataSourceIcon(DATASOURCE.LFACULTADES),
//						mixContext.getDataSourceName(DATASOURCE.LFACULTADES),
//						mixContext.isDataSourceSelected(DATASOURCE.LFACULTADES)),
//				new ListaCategoriaRow(
//						mixContext.getDataSourceIcon(DATASOURCE.LDEPARTAMENTOS),
//						mixContext.getDataSourceName(DATASOURCE.LDEPARTAMENTOS),
//						mixContext.isDataSourceSelected(DATASOURCE.LDEPARTAMENTOS)),
//				new ListaCategoriaRow(
//						mixContext.getDataSourceIcon(DATASOURCE.EVENTOSURL),
//						mixContext.getDataSourceName(DATASOURCE.EVENTOSURL),
//						mixContext.isDataSourceSelected(DATASOURCE.EVENTOSURL)),
//				new ListaCategoriaRow(
//						mixContext.getDataSourceIcon(DATASOURCE.LAUDITORIOS),
//						mixContext.getDataSourceName(DATASOURCE.LAUDITORIOS),
//						mixContext.isDataSourceSelected(DATASOURCE.LAUDITORIOS)),
//				new ListaCategoriaRow(
//						mixContext.getDataSourceIcon(DATASOURCE.LBIBLIOTECAS),
//						mixContext.getDataSourceName(DATASOURCE.LBIBLIOTECAS),
//						mixContext.isDataSourceSelected(DATASOURCE.LBIBLIOTECAS)),
//				new ListaCategoriaRow(
//						mixContext.getDataSourceIcon(DATASOURCE.LCAFETERIAS),
//						mixContext.getDataSourceName(DATASOURCE.LCAFETERIAS),
//						mixContext.isDataSourceSelected(DATASOURCE.LCAFETERIAS)),
//				new ListaCategoriaRow(
//						mixContext.getDataSourceIcon(DATASOURCE.LINSTITUTOS),
//						mixContext.getDataSourceName(DATASOURCE.LINSTITUTOS),
//						mixContext.isDataSourceSelected(DATASOURCE.LINSTITUTOS)),
//				new ListaCategoriaRow(
//						mixContext.getDataSourceIcon(DATASOURCE.LCENTROS),
//						mixContext.getDataSourceName(DATASOURCE.LCENTROS),
//						mixContext.isDataSourceSelected(DATASOURCE.LCENTROS)),
//				new ListaCategoriaRow(
//						mixContext.getDataSourceIcon(DATASOURCE.LDIRECCIONES),
//						mixContext.getDataSourceName(DATASOURCE.LDIRECCIONES),
//						mixContext.isDataSourceSelected(DATASOURCE.LDIRECCIONES)),
//				new ListaCategoriaRow(
//						mixContext.getDataSourceIcon(DATASOURCE.LOTROS),
//						mixContext.getDataSourceName(DATASOURCE.LOTROS),
//						mixContext.isDataSourceSelected(DATASOURCE.LOTROS))
				
/*
				//nuestras categorias genericas
				new ListaCategoriaRow(
						MixContext.getDataSourceIcon(DATASOURCE.ASESORIA_PASTORAL),
						MixContext.getDataSourceName(DATASOURCE.ASESORIA_PASTORAL),
						mixContext.isDataSourceSelected(DATASOURCE.ASESORIA_PASTORAL)),
				new ListaCategoriaRow(
						MixContext.getDataSourceIcon(DATASOURCE.ASOCIACIONES_Y_GRUPOS),
						MixContext.getDataSourceName(DATASOURCE.ASOCIACIONES_Y_GRUPOS),
						mixContext.isDataSourceSelected(DATASOURCE.ASOCIACIONES_Y_GRUPOS)),
				new ListaCategoriaRow(
						MixContext.getDataSourceIcon(DATASOURCE.CENTROS_DE_ESTUDIOS_Y_CENTROS_DE_INVESTIGACION),
						MixContext.getDataSourceName(DATASOURCE.CENTROS_DE_ESTUDIOS_Y_CENTROS_DE_INVESTIGACION),
						mixContext.isDataSourceSelected(DATASOURCE.CENTROS_DE_ESTUDIOS_Y_CENTROS_DE_INVESTIGACION)),
				new ListaCategoriaRow(
						MixContext.getDataSourceIcon(DATASOURCE.DEPORTES),
						MixContext.getDataSourceName(DATASOURCE.DEPORTES),
						mixContext.isDataSourceSelected(DATASOURCE.DEPORTES)),
				new ListaCategoriaRow(
						MixContext.getDataSourceIcon(DATASOURCE.DIRECCIONES_Y_OFICINAS),
						MixContext.getDataSourceName(DATASOURCE.DIRECCIONES_Y_OFICINAS),
						mixContext.isDataSourceSelected(DATASOURCE.DIRECCIONES_Y_OFICINAS)),
				new ListaCategoriaRow(
						MixContext.getDataSourceIcon(DATASOURCE.EDIFICIOS),
						MixContext.getDataSourceName(DATASOURCE.EDIFICIOS),
						mixContext.isDataSourceSelected(DATASOURCE.EDIFICIOS)),
				new ListaCategoriaRow(
						MixContext.getDataSourceIcon(DATASOURCE.ESTACIONAMIENTOS),
						MixContext.getDataSourceName(DATASOURCE.ESTACIONAMIENTOS),
						mixContext.isDataSourceSelected(DATASOURCE.ESTACIONAMIENTOS)),
				new ListaCategoriaRow(
						MixContext.getDataSourceIcon(DATASOURCE.FACULTADES_AUDITORIOS_Y_LABORATORIOS),
						MixContext.getDataSourceName(DATASOURCE.FACULTADES_AUDITORIOS_Y_LABORATORIOS),
						mixContext.isDataSourceSelected(DATASOURCE.FACULTADES_AUDITORIOS_Y_LABORATORIOS)),
				new ListaCategoriaRow(
						MixContext.getDataSourceIcon(DATASOURCE.INSTITUTOS_GENERICO),
						MixContext.getDataSourceName(DATASOURCE.INSTITUTOS_GENERICO),
						mixContext.isDataSourceSelected(DATASOURCE.INSTITUTOS_GENERICO)),
				new ListaCategoriaRow(
						MixContext.getDataSourceIcon(DATASOURCE.LIBRERIAS),
						MixContext.getDataSourceName(DATASOURCE.LIBRERIAS),
						mixContext.isDataSourceSelected(DATASOURCE.LIBRERIAS)),
				new ListaCategoriaRow(
						MixContext.getDataSourceIcon(DATASOURCE.PAGOS_Y_TRANSACCIONES),
						MixContext.getDataSourceName(DATASOURCE.PAGOS_Y_TRANSACCIONES),
						mixContext.isDataSourceSelected(DATASOURCE.PAGOS_Y_TRANSACCIONES)),
				new ListaCategoriaRow(
						MixContext.getDataSourceIcon(DATASOURCE.SERVICIOS_ALIMENTICIOS),
						MixContext.getDataSourceName(DATASOURCE.SERVICIOS_ALIMENTICIOS),
						mixContext.isDataSourceSelected(DATASOURCE.SERVICIOS_ALIMENTICIOS)),
				new ListaCategoriaRow(
						MixContext.getDataSourceIcon(DATASOURCE.PAPELERIA_Y_SERVICIOS_DIGITALES),
						MixContext.getDataSourceName(DATASOURCE.PAPELERIA_Y_SERVICIOS_DIGITALES),
						mixContext.isDataSourceSelected(DATASOURCE.PAPELERIA_Y_SERVICIOS_DIGITALES)),
				new ListaCategoriaRow(
						MixContext.getDataSourceIcon(DATASOURCE.SERVICIOS_DE_SALUD),
						MixContext.getDataSourceName(DATASOURCE.SERVICIOS_DE_SALUD),
						mixContext.isDataSourceSelected(DATASOURCE.SERVICIOS_DE_SALUD)),
				new ListaCategoriaRow(
						MixContext.getDataSourceIcon(DATASOURCE.SERVICIOS_HIGIENICOS),
						MixContext.getDataSourceName(DATASOURCE.SERVICIOS_HIGIENICOS),
						mixContext.isDataSourceSelected(DATASOURCE.SERVICIOS_HIGIENICOS)),
				new ListaCategoriaRow(
						MixContext.getDataSourceIcon(DATASOURCE.SISTEMAS_DE_BIBLIOTECAS_Y_SALAS_DE_LECTURA),
						MixContext.getDataSourceName(DATASOURCE.SISTEMAS_DE_BIBLIOTECAS_Y_SALAS_DE_LECTURA),
						mixContext.isDataSourceSelected(DATASOURCE.SISTEMAS_DE_BIBLIOTECAS_Y_SALAS_DE_LECTURA)),
				new ListaCategoriaRow(
						MixContext.getDataSourceIcon(DATASOURCE.TELEFONOS),
						MixContext.getDataSourceName(DATASOURCE.TELEFONOS),
						mixContext.isDataSourceSelected(DATASOURCE.TELEFONOS)),
				new ListaCategoriaRow(
						MixContext.getDataSourceIcon(DATASOURCE.VARIOS),
						MixContext.getDataSourceName(DATASOURCE.VARIOS),
						mixContext.isDataSourceSelected(DATASOURCE.VARIOS))
				//fin nuestras categorias genericas
						
		};
*/
/*
		ListaCategoriaAdapter adapter = new ListaCategoriaAdapter(this,
				R.layout.filtro_row, listacat_data);

		listF.setAdapter(adapter);

		listF.setVerticalFadingEdgeEnabled(true); // Make sure that fading
													// is displayed on
													// samsung devices

		listF.setOnItemClickListener(new OnItemClickListener() {

			@Override
			public void onItemClick(AdapterView<?> l, View v, int position,
					long id) {
				
				boolean unicaCatSeleccionada = false;
				
				for (int i = 0; i < dataSourceChecked.size(); i++){
					boolean prueba = dataSourceChecked.get(i); 
					if ( (prueba == true) && (i != position) )	{
						unicaCatSeleccionada = true;
					}
				}
				
				if (!unicaCatSeleccionada)	{
					Toast.makeText(VInicial.getContext(), "Debe seleccionar al menos una categoría", Toast.LENGTH_LONG).show();
				}
				else	{
					CheckBox cb = (CheckBox) v.findViewById(R.id.cbxListFiltro);
					cb.toggle();
				}
				
				
				
			}
		});
		
		listF.setOnItemLongClickListener(new OnItemLongClickListener() {

			@Override
			public boolean onItemLongClick(AdapterView<?> l, View v,
					int position, long id) {
				
				for (int i = 0; i < dataSourceChecked.size(); i++){
					if (i == position)	{
						if (dataSourceChecked.get(i) == false)	{
							CheckBox cb = (CheckBox) v.findViewById(R.id.cbxListFiltro);
							cb.toggle();
						}						
					}
					else	{
						if (dataSourceChecked.get(i) == true)	{
							//cambiar a not checked
							dataSourceChecked.set(i, false);
							clickOnDataSource(i);
						}
					}
				}
				
				//volver
				finish();
				return true;
			}
		});
*/		
	}

	public int GetDipsFromPixel(float pixels) {
	    // Get the screen's density scale
	    final float scale = getResources().getDisplayMetrics().density;
	    // Convert the dps to pixels, based on density scale
	    return (int) (pixels * scale + 0.5f);
    }
	
	private void prepareResource() {
		categorias = new ArrayList<GroupEntity>();
		
		for (int i = 0; i < DataSource.genericos.length; i++) {
			GroupEntity ge = new GroupEntity(MixContext.getDataSourceName(DataSource.genericos[i]), MixContext.getDataSourceIcon(DataSource.genericos[i]));
			 Item subcategorias[] = DataSource.getSubCat(DataSource.genericos[i]);
			for (int j = 0; j < subcategorias.length ; j++ ) {
				ListaCategoriaRow subcat = new ListaCategoriaRow(subcategorias[j].icon,
					subcategorias[j].text,
					mixContext.isDataSourceSelected(subcategorias[j].datasource),
					subcategorias[j].id);
				ge.GroupItemCollection.add(subcat);
			}
			categorias.add(ge);
		}
	}
	
	public boolean onCreateOptionsMenu(Menu menu) {
//		int base = Menu.FIRST;
		/*define the first*/
//		menu.add(base, base, base, getString(R.string.menu_item_seleccionar_todos)); //seleccionar todos
//		menu.add(base, base+1, base+1,  getString(R.string.menu_item_deseleccionar_todos)); //deseleccionar todos

		/*assign icons to the menu items*/
		//item1.setIcon(R.drawable.ic_menu_filtrar);
		//item2.setIcon(android.R.drawable.ic_menu_share);
	
		MenuInflater inflater = getSupportMenuInflater();
        inflater.inflate(R.menu.menu_filtros, menu);
		
		return true;
	}
	
	public boolean onOptionsItemSelected(MenuItem item){
		switch(item.getItemId()){
			case R.id.menuSeleccionarTodo:
				activarTodasLasCategorias();
				adapter.notifyDataSetChanged();
				break;
			case R.id.menuDeseleccionarTodo:
				desactivarTodasLasCategorias();
				adapter.notifyDataSetChanged();
				break;
		}
		return true;
	}
	
	public void activarTodasLasCategorias() {
		for (int i = 0; i < categoriasCompletas.size(); i++) {
			clickOnDataSource(i, true);
			getDataSourceChecked().set(i, true);
		}
		alMenosUnaCategoriaSeleccionada = true;
	}
	
	public void desactivarTodasLasCategorias() {
		for (int i = 0; i < categoriasCompletas.size(); i++) {
			clickOnDataSource(i, false);
			getDataSourceChecked().set(i, false);
		}
		alMenosUnaCategoriaSeleccionada = false;
	}
	
	public void clickOnDataSource(int position, boolean val) {
		if (dataView.isFrozen())
			dataView.setFrozen(false);
		
		mixContext.toogleDataSource(categoriasCompletas.get(position).datasource, val);
	}
	
	public boolean onKeyDown(int keyCode, KeyEvent event) {
		if (keyCode == KeyEvent.KEYCODE_BACK) {
			if (alMenosUnaCategoriaSeleccionada)
				return super.onKeyDown(keyCode, event);
			else {
				Toast.makeText(VInicial.getContext(), "Debe seleccionar al menos una categoria.", Toast.LENGTH_SHORT).show();
				return false;
			}
		} else {
			return false;
		}
		
	}
}